const fp  = require('lodash/fp');
const cars = [{
  name: 'Ferrari FF',
  horsepower: 660,
  dollar_value: 700000,
  in_stock: true,
}, {
  name: 'Spyker C12 Zagato',
  horsepower: 650,
  dollar_value: 648000,
  in_stock: false,
}, {
  name: 'Jaguar XKR-S',
  horsepower: 550,
  dollar_value: 132000,
  in_stock: false,
}, {
  name: 'Audi R8',
  horsepower: 525,
  dollar_value: 114200,
  in_stock: false,
}, {
  name: 'Aston Martin One-77',
  horsepower: 750,
  dollar_value: 1850000,
  in_stock: true,
}, {
  name: 'Pagani Huayra',
  horsepower: 700,
  dollar_value: 1300000,
  in_stock: false,
}]
// 1、使用函数组合 fp.flowRight()重新实现下面这个函数
let isLastInStock = function(cars) {
  let last_car = fp.last(cars)
  return fp.prop('in_stock', last_car);
}
console.log(isLastInStock(cars))

let getStock = fp.flowRight(fp.prop('in_stock'),fp.last)
console.log(getStock(cars))

// 2、使用fp.flowRight()、fp.prop() 和 fp.first() 获取第一个car的name
let getName = fp.flowRight(fp.prop('name'),fp.first)
console.log(getName(cars))

// 3、使用帮助函数 _average重构averageDollarValue，使用函数组合方式实现
let _average = function(xs) {
  return fp.reduce(fp.add, 0, xs) / xs.length
} // <- 无需改动
let averageDollarValue = function(cars) {
  let dollar_value = fp.map(function(car) {
    return car.dollar_value
  }, cars)
  return _average(dollar_value)
}
let newDollarList = function(cars) {
  return fp.map(function(car) {
    return car.dollar_value
  }, cars)
}
let getDollarValue = fp.flowRight(_average, newDollarList);
console.log(getDollarValue(cars));
// console.log(averageDollarValue(cars));
/* 
  4、使用flowRight 写一个sanitzeNames()函数，返回一个下划线连接的小写字符串，把数组中的name转换成为这种形式；
  例如： sanitizeNames(['Hello World']) => ['hello_world']
*/
let _underscore = fp.replace(/\w+/g, '_') // <- 无需改动
const sanitizeNames = fp.map(car=>{
  car.name = fp.flowRight(_underscore,fp.toLower)(car.name)
  return car
})
console.log(sanitizeNames(cars))